{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Example 3: Build a Combinatorial Library\n",
    "\n",
    "This notebook briefly introduces the `molli combine` workflow which allows to substitute attachment points on the molecules in a combinatorial fashion.\n",
    "\n",
    "## Hardware Specification for Rerun\n",
    "\n",
    "Desktop workstation with 2x (AMD EPYC 7702 64-Core) with total of 128 physical and 256 logical cores, 1024 GB DDR4 with Ubuntu 22.04 LTS operating system."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import molli as ml\n",
    "ml.visual.configure()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Overview.\n",
    "\n",
    "We start with the file `phosphorus_core.mol2`, in which we define the three attached pseudoatoms labeled `AP1`, `AP2` and `AP3`. These are the \"attachment points\": the pseudoatoms that define the direction of the substitution. These atoms need to be replaced with the groups found in another file: `substituents.cdxml`.\n",
    "We will be generating two libraries: achiral and chiral phosphines."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Atom(element=P, isotope=None, label='P', formal_charge=0, formal_spin=0)\n",
      "Atom(element=Unknown, isotope=None, label='AP1', formal_charge=0, formal_spin=0)\n",
      "Atom(element=Unknown, isotope=None, label='AP2', formal_charge=0, formal_spin=0)\n",
      "Atom(element=Unknown, isotope=None, label='AP3', formal_charge=0, formal_spin=0)\n"
     ]
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<div id=\"3dmolviewer_17296122164016392\"  style=\"position: relative; width: 100%; height: 500px;\">\n        <p id=\"3dmolwarning_17296122164016392\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n        </div>\n<script>\n\nvar loadScriptAsync = function(uri){\n  return new Promise((resolve, reject) => {\n    //this is to ignore the existence of requirejs amd\n    var savedexports, savedmodule;\n    if (typeof exports !== 'undefined') savedexports = exports;\n    else exports = {}\n    if (typeof module !== 'undefined') savedmodule = module;\n    else module = {}\n\n    var tag = document.createElement('script');\n    tag.src = uri;\n    tag.async = true;\n    tag.onload = () => {\n        exports = savedexports;\n        module = savedmodule;\n        resolve();\n    };\n  var firstScriptTag = document.getElementsByTagName('script')[0];\n  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n}\n\nvar viewer_17296122164016392 = null;\nvar warn = document.getElementById(\"3dmolwarning_17296122164016392\");\nif(warn) {\n    warn.parentNode.removeChild(warn);\n}\n$3Dmolpromise.then(function() {\nviewer_17296122164016392 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17296122164016392\"),{backgroundColor:\"white\"});\nviewer_17296122164016392.zoomTo();\n\tviewer_17296122164016392.addModel(\"@<TRIPOS>MOLECULE\\nP\\n4 3 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 P -2.5430 1.1839 -1.1479 P\\n2 AP1 -2.7496 2.9489 -0.6935 Unknown\\n3 AP2 -0.8185 1.2147 -1.7721 Unknown\\n4 AP3 -2.2670 0.4573 0.5137 Unknown\\n@<TRIPOS>BOND\\n1 1 2 1\\n2 1 3 1\\n3 1 4 1\\n\\n\",\"mol2\");\n\tviewer_17296122164016392.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n\tviewer_17296122164016392.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n\tviewer_17296122164016392.zoomTo();\n\tviewer_17296122164016392.setBackgroundColor(\"black\");\nviewer_17296122164016392.render();\n});\n</script>",
      "text/html": [
       "<div id=\"3dmolviewer_17296122164016392\"  style=\"position: relative; width: 100%; height: 500px;\">\n",
       "        <p id=\"3dmolwarning_17296122164016392\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n",
       "        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n",
       "        </div>\n",
       "<script>\n",
       "\n",
       "var loadScriptAsync = function(uri){\n",
       "  return new Promise((resolve, reject) => {\n",
       "    //this is to ignore the existence of requirejs amd\n",
       "    var savedexports, savedmodule;\n",
       "    if (typeof exports !== 'undefined') savedexports = exports;\n",
       "    else exports = {}\n",
       "    if (typeof module !== 'undefined') savedmodule = module;\n",
       "    else module = {}\n",
       "\n",
       "    var tag = document.createElement('script');\n",
       "    tag.src = uri;\n",
       "    tag.async = true;\n",
       "    tag.onload = () => {\n",
       "        exports = savedexports;\n",
       "        module = savedmodule;\n",
       "        resolve();\n",
       "    };\n",
       "  var firstScriptTag = document.getElementsByTagName('script')[0];\n",
       "  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n",
       "});\n",
       "};\n",
       "\n",
       "if(typeof $3Dmolpromise === 'undefined') {\n",
       "$3Dmolpromise = null;\n",
       "  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n",
       "}\n",
       "\n",
       "var viewer_17296122164016392 = null;\n",
       "var warn = document.getElementById(\"3dmolwarning_17296122164016392\");\n",
       "if(warn) {\n",
       "    warn.parentNode.removeChild(warn);\n",
       "}\n",
       "$3Dmolpromise.then(function() {\n",
       "viewer_17296122164016392 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17296122164016392\"),{backgroundColor:\"white\"});\n",
       "viewer_17296122164016392.zoomTo();\n",
       "\tviewer_17296122164016392.addModel(\"@<TRIPOS>MOLECULE\\nP\\n4 3 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 P -2.5430 1.1839 -1.1479 P\\n2 AP1 -2.7496 2.9489 -0.6935 Unknown\\n3 AP2 -0.8185 1.2147 -1.7721 Unknown\\n4 AP3 -2.2670 0.4573 0.5137 Unknown\\n@<TRIPOS>BOND\\n1 1 2 1\\n2 1 3 1\\n3 1 4 1\\n\\n\",\"mol2\");\n",
       "\tviewer_17296122164016392.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n",
       "\tviewer_17296122164016392.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n",
       "\tviewer_17296122164016392.zoomTo();\n",
       "\tviewer_17296122164016392.setBackgroundColor(\"black\");\n",
       "viewer_17296122164016392.render();\n",
       "});\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<script>\n            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n                \n                viewer_17296122164016392.render();\n            });\n            </script>",
      "text/html": [
       "<script>\n",
       "            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n",
       "                \n",
       "                viewer_17296122164016392.render();\n",
       "            });\n",
       "            </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "Molecule(name='P', formula='P1 Unknown3')"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mol = ml.load(\"phosphorus_core.mol2\")\n",
    "for a in mol.atoms:\n",
    "    print(a)\n",
    "mol"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Import prerequisite molecules as molli collections"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Matched 1 files for importing.\n",
      "Importing molecules: 100%|██████████████████████| 1/1 [00:00<00:00, 2411.91it/s]\n"
     ]
    }
   ],
   "source": [
    "!molli compile phosphorus_core.mol2 -o P.mlib --overwrite"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Parsing substituents.cdxml: 100%|██████████████| 21/21 [00:00<00:00, 497.99it/s]\n"
     ]
    }
   ],
   "source": [
    "!molli parse substituents.cdxml -o substituents.mlib --hadd --overwrite"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Achiral phosphine ligands\n",
    "\n",
    "The objective here is to create a library of phosphines in which the P atom is *not stereogenic*, which means that at least two substituents need to be identical.\n",
    "We are going to achieve this by using molli's command line interface.\n",
    "\n",
    "### Create a disubstituted phosphine library with `--mode same`\n",
    "This ensures that two substituents will be identical"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "usage: molli combine [-h] -s <substituents.mlib>\n",
      "                     [-m {same,permutns,combns,combns_repl}]\n",
      "                     [-a ATTACHMENT_POINTS] [-n 1] [-b 1] -o <combined.mlib>\n",
      "                     [-sep SEPARATOR] [--hadd]\n",
      "                     [--obopt [ff maxiter tol disp ...]] [--overwrite]\n",
      "                     cores\n",
      "\n",
      "Combines two lists of molecules together\n",
      "\n",
      "positional arguments:\n",
      "  cores                 Base library file to combine wth substituents\n",
      "\n",
      "options:\n",
      "  -h, --help            show this help message and exit\n",
      "  -s <substituents.mlib>, --substituents <substituents.mlib>\n",
      "                        Substituents to add at each attachment of a core file\n",
      "  -m {same,permutns,combns,combns_repl}, --mode {same,permutns,combns,combns_repl}\n",
      "                        Method for combining substituents\n",
      "  -a ATTACHMENT_POINTS, --attachment_points ATTACHMENT_POINTS\n",
      "                        Label used to find attachment points\n",
      "  -n 1, --nprocs 1      Number of processes to be used in parallel\n",
      "  -b 1, --batchsize 1   Number of molecules to be processed at a time on a\n",
      "                        single core\n",
      "  -o <combined.mlib>, --output <combined.mlib>\n",
      "                        File to be written to\n",
      "  -sep SEPARATOR, --separator SEPARATOR\n",
      "                        Name separator\n",
      "  --hadd                Add implicit hydrogen atoms wherever possible.\n",
      "  --obopt [ff maxiter tol disp ...]\n",
      "                        Perform openbabel optimization on the fly. This\n",
      "                        accepts up to 4 arguments. Arg 1: the forcefield\n",
      "                        (uff/mmff94/gaff/ghemical). Arg 2: is the max number\n",
      "                        of steps (default=500). Arg 3: energy convergence\n",
      "                        criterion (default=1e-4) Arg 4: geometry displacement\n",
      "                        (default=False) but values ~0.01-0.1 can help escape\n",
      "                        planarity.\n",
      "  --overwrite           Overwrite the target files if they exist (default is\n",
      "                        false)\n"
     ]
    }
   ],
   "source": [
    "!molli combine --help"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Will create a library of size 21\n",
      "100%|█████████████████████████████████████████████| 1/1 [00:00<00:00, 18.76it/s]\n"
     ]
    }
   ],
   "source": [
    "!molli combine P.mlib -s substituents.mlib -a AP1 -a AP2 -m same -o R2P.mlib --hadd --overwrite"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, we can attach the last remaining substituent to finish the achiral phosphine library."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Will create a library of size 441\n",
      "100%|███████████████████████████████████████████| 63/63 [02:50<00:00,  2.70s/it]\n"
     ]
    }
   ],
   "source": [
    "!molli combine R2P.mlib -a AP3 -s substituents.mlib --hadd --obopt UFF 1000 1e-4 0.02 --overwrite -n1 -b8 -o R3P_achiral.mlib"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In order to make the calculation faster, some of molli workflows (eventually, all of them) implement parallelization. See the acceleration for yourself!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Will create a library of size 441\n",
      "100%|███████████████████████████████████████████| 63/63 [00:25<00:00,  2.49it/s]\n"
     ]
    }
   ],
   "source": [
    "!molli combine R2P.mlib -a AP3 -s substituents.mlib --hadd --obopt UFF 1000 1e-4 0.02 --overwrite -n8 -b8 -o R3P_achiral.mlib "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Chiral phosphine ligands\n",
    "\n",
    "The objective here is to create a library of phosphines in which the P atom *is stereogenic*, which means that all substituents need to be different.\n",
    "We are going to achieve this by using molli's command line interface. \n",
    "\n",
    "The magic here is in the use of `-m combns` parameter of the `molli combine` workflow. This means that for each \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Will create a library of size 1330\n",
      "100%|█████████████████████████████████████████| 167/167 [08:35<00:00,  3.09s/it]\n"
     ]
    }
   ],
   "source": [
    "!molli combine P.mlib -s substituents.mlib -a AP1 -a AP2 -a AP3 -m combns -o R3P_chiral.mlib --hadd --obopt UFF 1000 1e-4 0.02 --overwrite -n1 -b8"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Jupyter also allows for special commands, so the command `%mlib_view` allows for direct visualization of molecules in a `MoleculeLibrary` without needing to run a full command to open it. The syntax is as follows:\n",
    "\n",
    "`%mlib_view <LIB_PATH> <KEY>`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/3dmoljs_load.v0": "<div id=\"3dmolviewer_17296129342946353\"  style=\"position: relative; width: 100%; height: 500px;\">\n        <p id=\"3dmolwarning_17296129342946353\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n        </div>\n<script>\n\nvar loadScriptAsync = function(uri){\n  return new Promise((resolve, reject) => {\n    //this is to ignore the existence of requirejs amd\n    var savedexports, savedmodule;\n    if (typeof exports !== 'undefined') savedexports = exports;\n    else exports = {}\n    if (typeof module !== 'undefined') savedmodule = module;\n    else module = {}\n\n    var tag = document.createElement('script');\n    tag.src = uri;\n    tag.async = true;\n    tag.onload = () => {\n        exports = savedexports;\n        module = savedmodule;\n        resolve();\n    };\n  var firstScriptTag = document.getElementsByTagName('script')[0];\n  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n}\n\nvar viewer_17296129342946353 = null;\nvar warn = document.getElementById(\"3dmolwarning_17296129342946353\");\nif(warn) {\n    warn.parentNode.removeChild(warn);\n}\n$3Dmolpromise.then(function() {\nviewer_17296129342946353 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17296129342946353\"),{backgroundColor:\"white\"});\nviewer_17296129342946353.zoomTo();\n\tviewer_17296129342946353.addModel(\"@<TRIPOS>MOLECULE\\nP_15_17_14\\n44 46 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 P 0.2007 0.0338 0.0946 P\\n2 None -1.2758 2.3979 0.3119 C\\n3 None -0.0207 1.8203 0.5387 C\\n4 None 1.0124 2.6152 1.0611 C\\n5 None 0.7840 3.9601 1.3647 C\\n6 None -0.4767 4.5376 1.1466 C\\n7 None -1.5066 3.7427 0.6139 C\\n8 None -0.6920 5.9920 1.4818 C\\n9 None 0.1840 6.7686 0.7452 F\\n10 None -1.9850 6.3973 1.1990 F\\n11 None -0.4514 6.1941 2.8286 F\\n12 None -2.0812 1.8024 -0.0997 H\\n13 None 1.9999 2.2158 1.2220 H\\n14 None 1.5949 4.5557 1.7660 H\\n15 None -2.4896 4.1551 0.4277 H\\n16 None 2.9491 -0.7558 -0.1197 C\\n17 None 1.9244 0.0830 -0.5943 C\\n18 None 2.1949 0.9719 -1.6426 C\\n19 None 3.4717 1.0426 -2.1975 C\\n20 None 4.4896 0.2195 -1.7162 C\\n21 None 4.2464 -0.6895 -0.6787 C\\n22 None 5.2907 -1.4630 -0.2730 O\\n23 None 5.3352 -2.4303 0.7144 C\\n24 None 2.7186 -1.4492 0.6670 H\\n25 None 1.4146 1.6164 -2.0275 H\\n26 None 3.6729 1.7367 -3.0032 H\\n27 None 5.4766 0.2846 -2.1571 H\\n28 None 5.6410 -3.3944 0.2586 H\\n29 None 4.3777 -2.5872 1.2392 H\\n30 None 6.0968 -2.1403 1.4670 H\\n31 None -0.4848 -1.6901 2.1865 C\\n32 None 0.4212 -0.6956 1.7914 C\\n33 None 1.4302 -0.2998 2.6862 C\\n34 None 1.5269 -0.8915 3.9474 C\\n35 None 0.6189 -1.8785 4.3345 C\\n36 None -0.3985 -2.2871 3.4554 C\\n37 None -1.3992 -3.3473 3.8424 C\\n38 None -1.3167 -4.4049 2.9551 F\\n39 None -1.1712 -3.8256 5.1214 F\\n40 None -2.6748 -2.8150 3.7928 F\\n41 None -1.2673 -1.9984 1.5031 H\\n42 None 2.1544 0.4491 2.4219 H\\n43 None 2.3104 -0.5840 4.6282 H\\n44 None 0.7166 -2.3180 5.3187 H\\n@<TRIPOS>BOND\\n1 2 3 2\\n2 3 4 1\\n3 4 5 2\\n4 5 6 1\\n5 6 7 2\\n6 7 2 1\\n7 8 9 1\\n8 8 10 1\\n9 8 11 1\\n10 6 8 1\\n11 2 12 1\\n12 4 13 1\\n13 5 14 1\\n14 7 15 1\\n15 1 3 1\\n16 16 17 2\\n17 17 18 1\\n18 18 19 2\\n19 19 20 1\\n20 20 21 2\\n21 21 16 1\\n22 22 23 1\\n23 21 22 1\\n24 16 24 1\\n25 18 25 1\\n26 19 26 1\\n27 20 27 1\\n28 23 28 1\\n29 23 29 1\\n30 23 30 1\\n31 1 17 1\\n32 31 32 2\\n33 32 33 1\\n34 33 34 2\\n35 34 35 1\\n36 35 36 2\\n37 36 31 1\\n38 37 38 1\\n39 37 39 1\\n40 37 40 1\\n41 36 37 1\\n42 31 41 1\\n43 33 42 1\\n44 34 43 1\\n45 35 44 1\\n46 1 32 1\\n\\n\",\"mol2\");\n\tviewer_17296129342946353.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n\tviewer_17296129342946353.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n\tviewer_17296129342946353.zoomTo();\n\tviewer_17296129342946353.setBackgroundColor(\"black\");\nviewer_17296129342946353.render();\n});\n</script>",
      "text/html": [
       "<div id=\"3dmolviewer_17296129342946353\"  style=\"position: relative; width: 100%; height: 500px;\">\n",
       "        <p id=\"3dmolwarning_17296129342946353\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n",
       "        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n",
       "        </div>\n",
       "<script>\n",
       "\n",
       "var loadScriptAsync = function(uri){\n",
       "  return new Promise((resolve, reject) => {\n",
       "    //this is to ignore the existence of requirejs amd\n",
       "    var savedexports, savedmodule;\n",
       "    if (typeof exports !== 'undefined') savedexports = exports;\n",
       "    else exports = {}\n",
       "    if (typeof module !== 'undefined') savedmodule = module;\n",
       "    else module = {}\n",
       "\n",
       "    var tag = document.createElement('script');\n",
       "    tag.src = uri;\n",
       "    tag.async = true;\n",
       "    tag.onload = () => {\n",
       "        exports = savedexports;\n",
       "        module = savedmodule;\n",
       "        resolve();\n",
       "    };\n",
       "  var firstScriptTag = document.getElementsByTagName('script')[0];\n",
       "  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n",
       "});\n",
       "};\n",
       "\n",
       "if(typeof $3Dmolpromise === 'undefined') {\n",
       "$3Dmolpromise = null;\n",
       "  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n",
       "}\n",
       "\n",
       "var viewer_17296129342946353 = null;\n",
       "var warn = document.getElementById(\"3dmolwarning_17296129342946353\");\n",
       "if(warn) {\n",
       "    warn.parentNode.removeChild(warn);\n",
       "}\n",
       "$3Dmolpromise.then(function() {\n",
       "viewer_17296129342946353 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17296129342946353\"),{backgroundColor:\"white\"});\n",
       "viewer_17296129342946353.zoomTo();\n",
       "\tviewer_17296129342946353.addModel(\"@<TRIPOS>MOLECULE\\nP_15_17_14\\n44 46 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 P 0.2007 0.0338 0.0946 P\\n2 None -1.2758 2.3979 0.3119 C\\n3 None -0.0207 1.8203 0.5387 C\\n4 None 1.0124 2.6152 1.0611 C\\n5 None 0.7840 3.9601 1.3647 C\\n6 None -0.4767 4.5376 1.1466 C\\n7 None -1.5066 3.7427 0.6139 C\\n8 None -0.6920 5.9920 1.4818 C\\n9 None 0.1840 6.7686 0.7452 F\\n10 None -1.9850 6.3973 1.1990 F\\n11 None -0.4514 6.1941 2.8286 F\\n12 None -2.0812 1.8024 -0.0997 H\\n13 None 1.9999 2.2158 1.2220 H\\n14 None 1.5949 4.5557 1.7660 H\\n15 None -2.4896 4.1551 0.4277 H\\n16 None 2.9491 -0.7558 -0.1197 C\\n17 None 1.9244 0.0830 -0.5943 C\\n18 None 2.1949 0.9719 -1.6426 C\\n19 None 3.4717 1.0426 -2.1975 C\\n20 None 4.4896 0.2195 -1.7162 C\\n21 None 4.2464 -0.6895 -0.6787 C\\n22 None 5.2907 -1.4630 -0.2730 O\\n23 None 5.3352 -2.4303 0.7144 C\\n24 None 2.7186 -1.4492 0.6670 H\\n25 None 1.4146 1.6164 -2.0275 H\\n26 None 3.6729 1.7367 -3.0032 H\\n27 None 5.4766 0.2846 -2.1571 H\\n28 None 5.6410 -3.3944 0.2586 H\\n29 None 4.3777 -2.5872 1.2392 H\\n30 None 6.0968 -2.1403 1.4670 H\\n31 None -0.4848 -1.6901 2.1865 C\\n32 None 0.4212 -0.6956 1.7914 C\\n33 None 1.4302 -0.2998 2.6862 C\\n34 None 1.5269 -0.8915 3.9474 C\\n35 None 0.6189 -1.8785 4.3345 C\\n36 None -0.3985 -2.2871 3.4554 C\\n37 None -1.3992 -3.3473 3.8424 C\\n38 None -1.3167 -4.4049 2.9551 F\\n39 None -1.1712 -3.8256 5.1214 F\\n40 None -2.6748 -2.8150 3.7928 F\\n41 None -1.2673 -1.9984 1.5031 H\\n42 None 2.1544 0.4491 2.4219 H\\n43 None 2.3104 -0.5840 4.6282 H\\n44 None 0.7166 -2.3180 5.3187 H\\n@<TRIPOS>BOND\\n1 2 3 2\\n2 3 4 1\\n3 4 5 2\\n4 5 6 1\\n5 6 7 2\\n6 7 2 1\\n7 8 9 1\\n8 8 10 1\\n9 8 11 1\\n10 6 8 1\\n11 2 12 1\\n12 4 13 1\\n13 5 14 1\\n14 7 15 1\\n15 1 3 1\\n16 16 17 2\\n17 17 18 1\\n18 18 19 2\\n19 19 20 1\\n20 20 21 2\\n21 21 16 1\\n22 22 23 1\\n23 21 22 1\\n24 16 24 1\\n25 18 25 1\\n26 19 26 1\\n27 20 27 1\\n28 23 28 1\\n29 23 29 1\\n30 23 30 1\\n31 1 17 1\\n32 31 32 2\\n33 32 33 1\\n34 33 34 2\\n35 34 35 1\\n36 35 36 2\\n37 36 31 1\\n38 37 38 1\\n39 37 39 1\\n40 37 40 1\\n41 36 37 1\\n42 31 41 1\\n43 33 42 1\\n44 34 43 1\\n45 35 44 1\\n46 1 32 1\\n\\n\",\"mol2\");\n",
       "\tviewer_17296129342946353.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n",
       "\tviewer_17296129342946353.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n",
       "\tviewer_17296129342946353.zoomTo();\n",
       "\tviewer_17296129342946353.setBackgroundColor(\"black\");\n",
       "viewer_17296129342946353.render();\n",
       "});\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<script>\n            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n                \n                viewer_17296129342946353.render();\n            });\n            </script>",
      "text/html": [
       "<script>\n",
       "            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n",
       "                \n",
       "                viewer_17296129342946353.render();\n",
       "            });\n",
       "            </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<script>\n            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n                \tviewer_17296129342946353.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n\n                viewer_17296129342946353.render();\n            });\n            </script>",
      "text/html": [
       "<script>\n",
       "            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n",
       "                \tviewer_17296129342946353.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n",
       "\n",
       "                viewer_17296129342946353.render();\n",
       "            });\n",
       "            </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%mlib_view R3P_chiral.mlib P_15_17_14 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    0  P_16_6_9    \n",
      "    1  P_9_13_12   \n",
      "    2  P_9_5_14    \n",
      "    3  P_3_20_12   \n",
      "    4  P_16_5_7    \n",
      "    5  P_4_2_10    \n",
      "    6  P_21_10_12  \n",
      "    7  P_3_17_20   \n",
      "    8  P_17_8_18   \n",
      "    9  P_4_17_9    \n",
      "   10  P_1_18_19   \n",
      "   11  P_16_13_18  \n",
      "   12  P_11_1_13   \n",
      "   13  P_3_17_13   \n",
      "   14  P_16_20_18  \n",
      "   15  P_3_17_5    \n",
      "   16  P_6_17_18   \n",
      "   17  P_4_17_12   \n",
      "   18  P_3_2_14    \n",
      "   19  P_21_20_18  \n",
      "   20  P_15_21_9   \n",
      "   21  P_8_5_19    \n",
      "   22  P_3_6_12    \n",
      "   23  P_15_20_5   \n",
      "   24  P_3_4_19    \n",
      "   25  P_16_15_18  \n",
      "   26  P_3_21_19   \n",
      "   27  P_21_1_8    \n",
      "   28  P_21_18_2   \n",
      "   29  P_6_13_18   \n",
      "   30  P_8_13_2    \n",
      "   31  P_3_19_10   \n",
      "   32  P_21_2_10   \n",
      "   33  P_21_5_12   \n",
      "   34  P_3_9_2     \n",
      "   35  P_5_18_19   \n",
      "   36  P_3_15_6    \n",
      "   37  P_21_5_13   \n",
      "   38  P_17_8_7    \n",
      "   39  P_11_20_14  \n",
      "   40  P_16_18_19  \n",
      "   41  P_19_10_7   \n",
      "   42  P_11_13_2   \n",
      "   43  P_13_2_12   \n",
      "   44  P_11_5_2    \n",
      "   45  P_4_11_20   \n",
      "   46  P_16_5_14   \n",
      "   47  P_21_20_9   \n",
      "   48  P_6_5_12    \n",
      "   49  P_4_9_2     \n",
      "   50  P_16_21_19  \n",
      "   51  P_4_18_7    \n",
      "   52  P_21_4_14   \n",
      "   53  P_11_5_14   \n",
      "   54  P_3_18_2    \n",
      "   55  P_1_2_19    \n",
      "   56  P_3_6_18    \n",
      "   57  P_4_5_12    \n",
      "   58  P_4_20_14   \n",
      "   59  P_6_2_7     \n",
      "   60  P_11_17_18  \n",
      "   61  P_11_17_19  \n",
      "   62  P_21_4_20   \n",
      "   63  P_1_6_19    \n",
      "   64  P_21_11_8   \n",
      "   65  P_5_2_14    \n",
      "   66  P_20_9_18   \n",
      "   67  P_21_11_6   \n",
      "   68  P_6_13_2    \n",
      "   69  P_16_1_19   \n",
      "   70  P_3_5_19    \n",
      "   71  P_4_11_5    \n",
      "   72  P_16_11_12  \n",
      "   73  P_15_20_9   \n",
      "   74  P_16_21_17  \n",
      "   75  P_15_9_18   \n",
      "   76  P_11_1_17   \n",
      "   77  P_21_4_7    \n",
      "   78  P_17_20_9   \n",
      "   79  P_15_11_18  \n",
      "   80  P_16_1_9    \n",
      "   81  P_18_2_10   \n",
      "   82  P_11_5_7    \n",
      "   83  P_8_18_14   \n",
      "   84  P_21_4_11   \n",
      "   85  P_16_21_7   \n",
      "   86  P_3_6_5     \n",
      "   87  P_13_19_12  \n",
      "   88  P_13_12_7   \n",
      "   89  P_17_2_7    \n",
      "   90  P_20_5_2    \n",
      "   91  P_6_10_12   \n",
      "   92  P_11_17_13  \n",
      "   93  P_11_17_2   \n",
      "   94  P_4_20_5    \n",
      "   95  P_4_8_5     \n",
      "   96  P_11_17_9   \n",
      "   97  P_11_17_7   \n",
      "   98  P_4_9_5     \n",
      "   99  P_11_2_19   \n",
      "  100  P_21_12_7   \n",
      "  101  P_11_17_12  \n",
      "  102  P_17_14_7   \n",
      "  103  P_1_6_5     \n",
      "  104  P_21_8_20   \n",
      "  105  P_3_17_12   \n",
      "  106  P_3_17_7    \n",
      "  107  P_20_10_7   \n",
      "  108  P_21_6_2    \n",
      "  109  P_11_17_10  \n",
      "  110  P_15_17_8   \n",
      "  111  P_15_4_7    \n",
      "  112  P_1_6_9     \n",
      "  113  P_1_13_12   \n",
      "  114  P_16_8_12   \n",
      "  115  P_11_8_19   \n",
      "  116  P_20_9_5    \n",
      "  117  P_3_13_10   \n",
      "  118  P_18_2_19   \n",
      "  119  P_20_18_14  \n",
      "  120  P_6_8_5     \n",
      "  121  P_21_6_14   \n",
      "  122  P_6_2_19    \n",
      "  123  P_11_13_14  \n",
      "  124  P_9_5_7     \n",
      "  125  P_1_17_19   \n",
      "  126  P_3_1_18    \n",
      "  127  P_17_13_18  \n",
      "  128  P_16_1_7    \n",
      "  129  P_3_15_21   \n",
      "  130  P_4_8_10    \n",
      "  131  P_21_13_2   \n",
      "  132  P_15_5_13   \n",
      "  133  P_1_2_7     \n",
      "  134  P_20_14_7   \n",
      "  135  P_15_2_14   \n",
      "  136  P_18_14_7   \n",
      "  137  P_21_9_7    \n",
      "  138  P_4_14_7    \n",
      "  139  P_20_19_10  \n",
      "  140  P_11_8_18   \n",
      "  141  P_6_8_18    \n",
      "  142  P_6_13_7    \n",
      "  143  P_21_9_18   \n",
      "  144  P_3_16_12   \n",
      "  145  P_3_21_20   \n",
      "  146  P_17_9_7    \n",
      "  147  P_16_17_14  \n",
      "  148  P_11_18_19  \n",
      "  149  P_17_8_20   \n",
      "  150  P_11_13_12  \n",
      "  151  P_3_5_14    \n",
      "  152  P_4_1_20    \n",
      "  153  P_15_8_14   \n",
      "  154  P_9_13_10   \n",
      "  155  P_4_1_10    \n",
      "  156  P_16_13_19  \n",
      "  157  P_1_18_2    \n",
      "  158  P_6_8_19    \n",
      "  159  P_3_6_10    \n",
      "  160  P_20_13_19  \n",
      "  161  P_3_15_14   \n",
      "  162  P_13_10_7   \n",
      "  163  P_15_18_14  \n",
      "  164  P_16_4_9    \n",
      "  165  P_21_6_17   \n",
      "  166  P_6_2_14    \n",
      "  167  P_3_15_7    \n",
      "  168  P_1_8_19    \n",
      "  169  P_1_8_2     \n",
      "  170  P_4_9_12    \n",
      "  171  P_11_6_9    \n",
      "  172  P_17_19_14  \n",
      "  173  P_8_18_7    \n",
      "  174  P_15_19_7   \n",
      "  175  P_21_4_19   \n",
      "  176  P_17_9_13   \n",
      "  177  P_4_10_7    \n",
      "  178  P_4_5_13    \n",
      "  179  P_21_2_7    \n",
      "  180  P_11_5_18   \n",
      "  181  P_4_20_9    \n",
      "  182  P_3_11_20   \n",
      "  183  P_4_20_19   \n",
      "  184  P_16_20_5   \n",
      "  185  P_17_20_12  \n",
      "  186  P_16_5_12   \n",
      "  187  P_9_2_19    \n",
      "  188  P_4_1_19    \n",
      "  189  P_21_8_19   \n",
      "  190  P_15_5_19   \n",
      "  191  P_8_18_19   \n",
      "  192  P_21_6_8    \n",
      "  193  P_16_4_11   \n",
      "  194  P_17_2_12   \n",
      "  195  P_15_4_13   \n",
      "  196  P_5_13_12   \n",
      "  197  P_1_6_7     \n",
      "  198  P_15_4_8    \n",
      "  199  P_5_14_7    \n",
      "  200  P_21_19_14  \n",
      "  201  P_21_6_7    \n",
      "  202  P_4_11_7    \n",
      "  203  P_16_11_8   \n",
      "  204  P_21_5_2    \n",
      "  205  P_9_5_10    \n",
      "  206  P_21_13_14  \n",
      "  207  P_17_5_2    \n",
      "  208  P_20_9_2    \n",
      "  209  P_6_5_14    \n",
      "  210  P_3_21_2    \n",
      "  211  P_11_5_19   \n",
      "  212  P_16_2_19   \n",
      "  213  P_3_15_17   \n",
      "  214  P_16_21_8   \n",
      "  215  P_9_13_7    \n",
      "  216  P_3_5_2     \n",
      "  217  P_5_2_19    \n",
      "  218  P_4_8_20    \n",
      "  219  P_17_5_13   \n",
      "  220  P_16_11_10  \n",
      "  221  P_1_17_20   \n",
      "  222  P_3_15_2    \n",
      "  223  P_4_6_9     \n",
      "  224  P_21_11_1   \n",
      "  225  P_5_18_7    \n",
      "  226  P_8_10_7    \n",
      "  227  P_1_5_12    \n",
      "  228  P_15_11_2   \n",
      "  229  P_6_14_12   \n",
      "  230  P_16_18_7   \n",
      "  231  P_4_6_2     \n",
      "  232  P_15_18_10  \n",
      "  233  P_3_16_4    \n",
      "  234  P_17_10_14  \n",
      "  235  P_20_18_7   \n",
      "  236  P_21_6_20   \n",
      "  237  P_8_5_12    \n",
      "  238  P_16_4_12   \n",
      "  239  P_11_6_19   \n",
      "  240  P_16_2_7    \n",
      "  241  P_4_9_18    \n",
      "  242  P_4_11_1    \n",
      "  243  P_17_8_9    \n",
      "  244  P_3_1_9     \n",
      "  245  P_11_6_7    \n",
      "  246  P_11_1_12   \n",
      "  247  P_1_19_7    \n",
      "  248  P_15_4_20   \n",
      "  249  P_4_6_13    \n",
      "  250  P_16_8_14   \n",
      "  251  P_21_6_9    \n",
      "  252  P_3_21_14   \n",
      "  253  P_4_13_12   \n",
      "  254  P_20_2_10   \n",
      "  255  P_15_6_7    \n",
      "  256  P_1_17_5    \n",
      "  257  P_15_11_9   \n",
      "  258  P_16_8_2    \n",
      "  259  P_17_20_13  \n",
      "  260  P_15_19_12  \n",
      "  261  P_17_20_5   \n",
      "  262  P_16_6_2    \n",
      "  263  P_18_2_7    \n",
      "  264  P_21_17_14  \n",
      "  265  P_8_9_7     \n",
      "  266  P_21_6_19   \n",
      "  267  P_1_20_12   \n",
      "  268  P_6_17_2    \n",
      "  269  P_3_21_17   \n",
      "  270  P_9_18_12   \n",
      "  271  P_15_11_13  \n",
      "  272  P_16_11_18  \n",
      "  273  P_16_17_7   \n",
      "  274  P_6_13_12   \n",
      "  275  P_3_17_2    \n",
      "  276  P_1_17_9    \n",
      "  277  P_6_9_19    \n",
      "  278  P_16_5_19   \n",
      "  279  P_21_1_10   \n",
      "  280  P_4_17_10   \n",
      "  281  P_3_19_14   \n",
      "  282  P_11_8_9    \n",
      "  283  P_8_9_10    \n",
      "  284  P_21_11_14  \n",
      "  285  P_4_2_14    \n",
      "  286  P_16_20_9   \n",
      "  287  P_8_2_10    \n",
      "  288  P_20_13_12  \n",
      "  289  P_20_18_12  \n",
      "  290  P_3_4_14    \n",
      "  291  P_6_8_12    \n",
      "  292  P_3_21_6    \n",
      "  293  P_21_1_13   \n",
      "  294  P_16_11_19  \n",
      "  295  P_15_17_19  \n",
      "  296  P_6_8_7     \n",
      "  297  P_5_19_7    \n",
      "  298  P_21_17_19  \n",
      "  299  P_16_6_5    \n",
      "  300  P_4_8_2     \n",
      "  301  P_6_18_19   \n",
      "  302  P_16_6_19   \n",
      "  303  P_11_18_12  \n",
      "  304  P_21_1_5    \n",
      "  305  P_4_19_7    \n",
      "  306  P_18_19_7   \n",
      "  307  P_16_17_19  \n",
      "  308  P_1_8_9     \n",
      "  309  P_15_14_12  \n",
      "  310  P_8_2_12    \n",
      "  311  P_1_2_10    \n",
      "  312  P_1_9_5     \n",
      "  313  P_3_8_20    \n",
      "  314  P_18_12_7   \n",
      "  315  P_8_9_18    \n",
      "  316  P_16_14_12  \n",
      "  317  P_11_18_7   \n",
      "  318  P_1_20_19   \n",
      "  319  P_16_13_7   \n",
      "  320  P_4_5_14    \n",
      "  321  P_16_15_6   \n",
      "  322  P_11_2_14   \n",
      "  323  P_16_4_10   \n",
      "  324  P_21_4_6    \n",
      "  325  P_1_13_18   \n",
      "  326  P_9_5_18    \n",
      "  327  P_21_9_12   \n",
      "  328  P_17_9_5    \n",
      "  329  P_15_1_14   \n",
      "  330  P_3_9_18    \n",
      "  331  P_6_17_13   \n",
      "  332  P_20_5_19   \n",
      "  333  P_16_4_17   \n",
      "  334  P_3_15_5    \n",
      "  335  P_11_18_2   \n",
      "  336  P_17_9_18   \n",
      "  337  P_11_6_14   \n",
      "  338  P_6_20_7    \n",
      "  339  P_16_13_12  \n",
      "  340  P_3_16_20   \n",
      "  341  P_14_12_7   \n",
      "  342  P_15_18_2   \n",
      "  343  P_1_20_9    \n",
      "  344  P_15_1_7    \n",
      "  345  P_3_13_12   \n",
      "  346  P_15_1_5    \n",
      "  347  P_15_8_20   \n",
      "  348  P_21_6_13   \n",
      "  349  P_8_9_12    \n",
      "  350  P_16_6_8    \n",
      "  351  P_21_6_10   \n",
      "  352  P_3_17_14   \n",
      "  353  P_6_20_10   \n",
      "  354  P_16_20_10  \n",
      "  355  P_21_1_20   \n",
      "  356  P_21_13_12  \n",
      "  357  P_3_8_13    \n",
      "  358  P_9_10_14   \n",
      "  359  P_16_11_20  \n",
      "  360  P_16_11_1   \n",
      "  361  P_16_9_5    \n",
      "  362  P_16_12_7   \n",
      "  363  P_3_15_10   \n",
      "  364  P_8_5_7     \n",
      "  365  P_3_8_7     \n",
      "  366  P_4_8_14    \n",
      "  367  P_21_5_14   \n",
      "  368  P_4_8_7     \n",
      "  369  P_8_20_19   \n",
      "  370  P_20_9_13   \n",
      "  371  P_11_19_7   \n",
      "  372  P_3_4_8     \n",
      "  373  P_8_13_12   \n",
      "  374  P_15_12_7   \n",
      "  375  P_3_9_7     \n",
      "  376  P_3_4_9     \n",
      "  377  P_4_13_7    \n",
      "  378  P_17_18_12  \n",
      "  379  P_16_21_5   \n",
      "  380  P_21_17_9   \n",
      "  381  P_1_2_12    \n",
      "  382  P_15_11_14  \n",
      "  383  P_1_18_12   \n",
      "  384  P_11_2_12   \n",
      "  385  P_1_8_18    \n",
      "  386  P_15_21_17  \n",
      "  387  P_15_5_10   \n",
      "  388  P_1_12_7    \n",
      "  389  P_11_6_13   \n",
      "  390  P_15_1_17   \n",
      "  391  P_9_13_14   \n",
      "  392  P_4_1_2     \n",
      "  393  P_4_8_18    \n",
      "  394  P_3_16_14   \n",
      "  395  P_17_13_10  \n",
      "  396  P_11_6_10   \n",
      "  397  P_21_2_12   \n",
      "  398  P_5_2_12    \n",
      "  399  P_8_9_14    \n",
      "  400  P_4_6_14    \n",
      "  401  P_3_5_13    \n",
      "  402  P_15_1_13   \n",
      "  403  P_8_19_14   \n",
      "  404  P_15_13_19  \n",
      "  405  P_21_9_2    \n",
      "  406  P_17_8_5    \n",
      "  407  P_11_19_10  \n",
      "  408  P_5_13_7    \n",
      "  409  P_16_21_1   \n",
      "  410  P_16_21_10  \n",
      "  411  P_16_1_5    \n",
      "  412  P_15_14_7   \n",
      "  413  P_5_19_10   \n",
      "  414  P_3_4_7     \n",
      "  415  P_21_20_19  \n",
      "  416  P_1_20_18   \n",
      "  417  P_3_21_7    \n",
      "  418  P_15_20_13  \n",
      "  419  P_9_19_14   \n",
      "  420  P_3_17_19   \n",
      "  421  P_1_14_12   \n",
      "  422  P_16_1_13   \n",
      "  423  P_21_17_8   \n",
      "  424  P_11_9_5    \n",
      "  425  P_18_10_14  \n",
      "  426  P_20_10_14  \n",
      "  427  P_15_11_19  \n",
      "  428  P_13_18_12  \n",
      "  429  P_8_19_10   \n",
      "  430  P_13_2_7    \n",
      "  431  P_4_1_13    \n",
      "  432  P_15_18_12  \n",
      "  433  P_1_13_19   \n",
      "  434  P_16_2_12   \n",
      "  435  P_11_14_7   \n",
      "  436  P_3_17_8    \n",
      "  437  P_11_17_20  \n",
      "  438  P_16_1_2    \n",
      "  439  P_5_13_2    \n",
      "  440  P_11_1_5    \n",
      "  441  P_3_20_9    \n",
      "  442  P_15_19_14  \n",
      "  443  P_21_4_13   \n",
      "  444  P_15_21_8   \n",
      "  445  P_4_11_19   \n",
      "  446  P_4_1_7     \n",
      "  447  P_13_19_7   \n",
      "  448  P_4_6_20    \n",
      "  449  P_4_11_18   \n",
      "  450  P_16_21_4   \n",
      "  451  P_15_8_18   \n",
      "  452  P_11_9_7    \n",
      "  453  P_21_13_7   \n",
      "  454  P_17_9_14   \n",
      "  455  P_4_13_10   \n",
      "  456  P_21_18_10  \n",
      "  457  P_16_20_2   \n",
      "  458  P_21_13_10  \n",
      "  459  P_16_11_7   \n",
      "  460  P_9_12_7    \n",
      "  461  P_9_10_7    \n",
      "  462  P_4_9_10    \n",
      "  463  P_15_6_13   \n",
      "  464  P_3_17_10   \n",
      "  465  P_3_13_19   \n",
      "  466  P_4_6_7     \n",
      "  467  P_20_18_10  \n",
      "  468  P_15_4_14   \n",
      "  469  P_4_20_7    \n",
      "  470  P_6_20_9    \n",
      "  471  P_16_9_2    \n",
      "  472  P_21_11_7   \n",
      "  473  P_20_5_7    \n",
      "  474  P_6_13_10   \n",
      "  475  P_4_13_18   \n",
      "  476  P_21_8_14   \n",
      "  477  P_3_16_11   \n",
      "  478  P_11_12_7   \n",
      "  479  P_3_18_7    \n",
      "  480  P_16_17_10  \n",
      "  481  P_15_21_12  \n",
      "  482  P_17_9_12   \n",
      "  483  P_16_11_17  \n",
      "  484  P_9_19_7    \n",
      "  485  P_5_2_7     \n",
      "  486  P_3_4_18    \n",
      "  487  P_8_13_14   \n",
      "  488  P_3_21_4    \n",
      "  489  P_15_6_20   \n",
      "  490  P_3_10_12   \n",
      "  491  P_16_1_12   \n",
      "  492  P_21_8_18   \n",
      "  493  P_17_2_19   \n",
      "  494  P_11_6_5    \n",
      "  495  P_15_5_18   \n",
      "  496  P_3_1_2     \n",
      "  497  P_8_13_10   \n",
      "  498  P_1_6_13    \n",
      "  499  P_4_1_12    \n",
      "  500  P_3_1_8     \n",
      "  501  P_21_9_13   \n",
      "  502  P_4_20_2    \n",
      "  503  P_15_11_17  \n",
      "  504  P_16_9_14   \n",
      "  505  P_15_5_14   \n",
      "  506  P_3_9_12    \n",
      "  507  P_21_11_18  \n",
      "  508  P_6_20_2    \n",
      "  509  P_15_1_12   \n",
      "  510  P_4_6_18    \n",
      "  511  P_15_1_6    \n",
      "  512  P_4_11_8    \n",
      "  513  P_16_1_20   \n",
      "  514  P_16_6_18   \n",
      "  515  P_17_10_12  \n",
      "  516  P_21_2_14   \n",
      "  517  P_18_19_10  \n",
      "  518  P_4_1_5     \n",
      "  519  P_5_10_7    \n",
      "  520  P_16_18_10  \n",
      "  521  P_3_5_10    \n",
      "  522  P_16_15_13  \n",
      "  523  P_6_20_12   \n",
      "  524  P_9_13_2    \n",
      "  525  P_1_17_10   \n",
      "  526  P_6_20_13   \n",
      "  527  P_2_10_14   \n",
      "  528  P_16_4_1    \n",
      "  529  P_9_13_18   \n",
      "  530  P_20_9_10   \n",
      "  531  P_16_15_9   \n",
      "  532  P_3_1_14    \n",
      "  533  P_16_11_9   \n",
      "  534  P_3_1_5     \n",
      "  535  P_4_20_10   \n",
      "  536  P_1_2_14    \n",
      "  537  P_15_1_19   \n",
      "  538  P_15_6_9    \n",
      "  539  P_9_18_19   \n",
      "  540  P_16_4_8    \n",
      "  541  P_16_19_14  \n",
      "  542  P_3_12_7    \n",
      "  543  P_15_17_18  \n",
      "  544  P_16_15_17  \n",
      "  545  P_13_18_10  \n",
      "  546  P_3_11_7    \n",
      "  547  P_9_18_14   \n",
      "  548  P_16_8_7    \n",
      "  549  P_16_11_14  \n",
      "  550  P_20_5_10   \n",
      "  551  P_3_15_12   \n",
      "  552  P_1_13_7    \n",
      "  553  P_17_9_10   \n",
      "  554  P_17_10_7   \n",
      "  555  P_3_8_9     \n",
      "  556  P_15_6_14   \n",
      "  557  P_4_18_2    \n",
      "  558  P_3_19_7    \n",
      "  559  P_15_18_7   \n",
      "  560  P_20_18_2   \n",
      "  561  P_3_1_13    \n",
      "  562  P_15_4_12   \n",
      "  563  P_16_6_13   \n",
      "  564  P_16_9_12   \n",
      "  565  P_1_20_7    \n",
      "  566  P_15_21_1   \n",
      "  567  P_11_13_10  \n",
      "  568  P_16_4_7    \n",
      "  569  P_3_1_20    \n",
      "  570  P_1_17_13   \n",
      "  571  P_1_6_18    \n",
      "  572  P_4_11_10   \n",
      "  573  P_20_13_18  \n",
      "  574  P_17_18_19  \n",
      "  575  P_3_9_14    \n",
      "  576  P_15_13_10  \n",
      "  577  P_16_6_20   \n",
      "  578  P_21_19_12  \n",
      "  579  P_16_4_20   \n",
      "  580  P_11_13_18  \n",
      "  581  P_16_19_10  \n",
      "  582  P_17_5_14   \n",
      "  583  P_15_13_14  \n",
      "  584  P_15_11_7   \n",
      "  585  P_16_20_12  \n",
      "  586  P_1_8_12    \n",
      "  587  P_1_17_18   \n",
      "  588  P_3_5_12    \n",
      "  589  P_3_21_9    \n",
      "  590  P_21_4_18   \n",
      "  591  P_20_13_7   \n",
      "  592  P_17_13_14  \n",
      "  593  P_3_13_2    \n",
      "  594  P_11_10_12  \n",
      "  595  P_3_8_2     \n",
      "  596  P_20_19_14  \n",
      "  597  P_3_11_19   \n",
      "  598  P_15_11_8   \n",
      "  599  P_16_8_20   \n",
      "  600  P_3_11_10   \n",
      "  601  P_1_9_7     \n",
      "  602  P_16_4_13   \n",
      "  603  P_3_15_1    \n",
      "  604  P_15_8_9    \n",
      "  605  P_3_6_2     \n",
      "  606  P_15_21_4   \n",
      "  607  P_3_11_9    \n",
      "  608  P_15_17_2   \n",
      "  609  P_9_2_7     \n",
      "  610  P_4_5_10    \n",
      "  611  P_8_9_13    \n",
      "  612  P_11_8_12   \n",
      "  613  P_3_18_12   \n",
      "  614  P_4_20_18   \n",
      "  615  P_1_9_10    \n",
      "  616  P_4_20_13   \n",
      "  617  P_16_5_10   \n",
      "  618  P_6_5_10    \n",
      "  619  P_16_21_2   \n",
      "  620  P_3_6_17    \n",
      "  621  P_4_19_10   \n",
      "  622  P_17_18_2   \n",
      "  623  P_13_18_14  \n",
      "  624  P_15_9_7    \n",
      "  625  P_1_8_5     \n",
      "  626  P_8_13_18   \n",
      "  627  P_1_6_2     \n",
      "  628  P_21_13_19  \n",
      "  629  P_1_9_12    \n",
      "  630  P_20_2_12   \n",
      "  631  P_3_8_14    \n",
      "  632  P_16_17_20  \n",
      "  633  P_6_18_12   \n",
      "  634  P_16_11_2   \n",
      "  635  P_3_20_5    \n",
      "  636  P_15_21_13  \n",
      "  637  P_21_17_7   \n",
      "  638  P_18_14_12  \n",
      "  639  P_3_6_14    \n",
      "  640  P_21_11_2   \n",
      "  641  P_11_20_12  \n",
      "  642  P_21_20_14  \n",
      "  643  P_4_6_19    \n",
      "  644  P_6_18_2    \n",
      "  645  P_15_6_18   \n",
      "  646  P_16_20_13  \n",
      "  647  P_4_6_10    \n",
      "  648  P_20_9_12   \n",
      "  649  P_11_19_14  \n",
      "  650  P_3_20_7    \n",
      "  651  P_3_10_7    \n",
      "  652  P_21_17_20  \n",
      "  653  P_3_8_10    \n",
      "  654  P_21_5_19   \n",
      "  655  P_15_9_13   \n",
      "  656  P_11_9_10   \n",
      "  657  P_1_8_14    \n",
      "  658  P_16_17_13  \n",
      "  659  P_3_1_12    \n",
      "  660  P_4_11_14   \n",
      "  661  P_1_20_14   \n",
      "  662  P_3_10_14   \n",
      "  663  P_4_18_19   \n",
      "  664  P_15_5_7    \n",
      "  665  P_15_6_10   \n",
      "  666  P_16_6_7    \n",
      "  667  P_15_11_10  \n",
      "  668  P_13_14_7   \n",
      "  669  P_18_19_12  \n",
      "  670  P_3_21_1    \n",
      "  671  P_20_13_14  \n",
      "  672  P_15_9_10   \n",
      "  673  P_1_19_12   \n",
      "  674  P_11_8_14   \n",
      "  675  P_15_10_14  \n",
      "  676  P_15_11_12  \n",
      "  677  P_17_9_2    \n",
      "  678  P_2_19_14   \n",
      "  679  P_4_14_12   \n",
      "  680  P_16_6_10   \n",
      "  681  P_6_17_8    \n",
      "  682  P_3_8_19    \n",
      "  683  P_16_1_17   \n",
      "  684  P_11_20_13  \n",
      "  685  P_15_9_2    \n",
      "  686  P_20_9_7    \n",
      "  687  P_3_4_20    \n",
      "  688  P_17_8_10   \n",
      "  689  P_10_12_7   \n",
      "  690  P_16_15_19  \n",
      "  691  P_1_8_13    \n",
      "  692  P_3_21_18   \n",
      "  693  P_9_5_12    \n",
      "  694  P_21_20_7   \n",
      "  695  P_3_15_4    \n",
      "  696  P_16_17_5   \n",
      "  697  P_3_9_5     \n",
      "  698  P_6_19_7    \n",
      "  699  P_16_21_18  \n",
      "  700  P_5_10_12   \n",
      "  701  P_21_9_19   \n",
      "  702  P_21_18_14  \n",
      "  703  P_15_19_10  \n",
      "  704  P_15_4_2    \n",
      "  705  P_3_16_6    \n",
      "  706  P_15_1_2    \n",
      "  707  P_9_13_19   \n",
      "  708  P_1_10_14   \n",
      "  709  P_1_13_14   \n",
      "  710  P_11_1_18   \n",
      "  711  P_3_11_17   \n",
      "  712  P_21_13_18  \n",
      "  713  P_3_16_19   \n",
      "  714  P_16_15_21  \n",
      "  715  P_17_8_13   \n",
      "  716  P_6_20_18   \n",
      "  717  P_1_8_10    \n",
      "  718  P_16_20_14  \n",
      "  719  P_6_17_20   \n",
      "  720  P_19_10_14  \n",
      "  721  P_4_17_14   \n",
      "  722  P_3_4_5     \n",
      "  723  P_6_9_2     \n",
      "  724  P_4_17_13   \n",
      "  725  P_9_14_7    \n",
      "  726  P_21_8_9    \n",
      "  727  P_3_15_9    \n",
      "  728  P_21_10_14  \n",
      "  729  P_9_5_2     \n",
      "  730  P_16_8_18   \n",
      "  731  P_16_11_5   \n",
      "  732  P_15_1_18   \n",
      "  733  P_1_19_14   \n",
      "  734  P_21_1_18   \n",
      "  735  P_8_18_12   \n",
      "  736  P_15_20_19  \n",
      "  737  P_16_18_14  \n",
      "  738  P_15_8_12   \n",
      "  739  P_11_2_7    \n",
      "  740  P_8_5_14    \n",
      "  741  P_16_8_19   \n",
      "  742  P_3_6_7     \n",
      "  743  P_15_2_10   \n",
      "  744  P_4_5_19    \n",
      "  745  P_3_15_8    \n",
      "  746  P_11_18_10  \n",
      "  747  P_16_19_12  \n",
      "  748  P_16_1_8    \n",
      "  749  P_3_1_19    \n",
      "  750  P_16_9_10   \n",
      "  751  P_17_20_2   \n",
      "  752  P_3_11_14   \n",
      "  753  P_4_12_7    \n",
      "  754  P_3_18_14   \n",
      "  755  P_16_9_19   \n",
      "  756  P_4_11_9    \n",
      "  757  P_16_15_14  \n",
      "  758  P_15_13_7   \n",
      "  759  P_20_13_2   \n",
      "  760  P_3_20_10   \n",
      "  761  P_21_11_10  \n",
      "  762  P_4_17_7    \n",
      "  763  P_15_4_5    \n",
      "  764  P_21_5_10   \n",
      "  765  P_17_18_14  \n",
      "  766  P_9_19_10   \n",
      "  767  P_15_4_9    \n",
      "  768  P_8_18_2    \n",
      "  769  P_4_10_14   \n",
      "  770  P_16_9_13   \n",
      "  771  P_21_8_2    \n",
      "  772  P_15_21_14  \n",
      "  773  P_6_8_13    \n",
      "  774  P_21_6_12   \n",
      "  775  P_4_6_17    \n",
      "  776  P_4_13_14   \n",
      "  777  P_20_5_14   \n",
      "  778  P_11_1_20   \n",
      "  779  P_3_16_5    \n",
      "  780  P_4_9_13    \n",
      "  781  P_2_14_12   \n",
      "  782  P_15_6_2    \n",
      "  783  P_16_8_10   \n",
      "  784  P_15_9_5    \n",
      "  785  P_1_17_7    \n",
      "  786  P_17_8_19   \n",
      "  787  P_1_20_5    \n",
      "  788  P_3_20_2    \n",
      "  789  P_9_2_12    \n",
      "  790  P_16_17_9   \n",
      "  791  P_5_19_12   \n",
      "  792  P_5_12_7    \n",
      "  793  P_9_2_14    \n",
      "  794  P_3_1_17    \n",
      "  795  P_16_11_6   \n",
      "  796  P_6_8_14    \n",
      "  797  P_3_13_14   \n",
      "  798  P_16_4_19   \n",
      "  799  P_1_13_10   \n",
      "  800  P_13_18_2   \n",
      "  801  P_13_18_7   \n",
      "  802  P_15_5_12   \n",
      "  803  P_11_8_7    \n",
      "  804  P_21_8_12   \n",
      "  805  P_15_17_10  \n",
      "  806  P_6_9_12    \n",
      "  807  P_18_2_12   \n",
      "  808  P_8_10_12   \n",
      "  809  P_4_1_14    \n",
      "  810  P_8_5_2     \n",
      "  811  P_19_12_7   \n",
      "  812  P_11_9_12   \n",
      "  813  P_1_17_14   \n",
      "  814  P_6_2_12    \n",
      "  815  P_8_13_19   \n",
      "  816  P_15_10_7   \n",
      "  817  P_4_18_10   \n",
      "  818  P_16_15_10  \n",
      "  819  P_21_8_10   \n",
      "  820  P_6_17_12   \n",
      "  821  P_17_20_7   \n",
      "  822  P_13_19_14  \n",
      "  823  P_17_2_10   \n",
      "  824  P_4_17_19   \n",
      "  825  P_3_18_10   \n",
      "  826  P_11_18_14  \n",
      "  827  P_17_19_10  \n",
      "  828  P_6_19_12   \n",
      "  829  P_16_20_19  \n",
      "  830  P_16_9_7    \n",
      "  831  P_8_18_10   \n",
      "  832  P_15_17_12  \n",
      "  833  P_15_6_8    \n",
      "  834  P_21_20_10  \n",
      "  835  P_21_4_17   \n",
      "  836  P_21_20_12  \n",
      "  837  P_17_5_7    \n",
      "  838  P_1_20_13   \n",
      "  839  P_4_9_14    \n",
      "  840  P_8_20_10   \n",
      "  841  P_15_17_7   \n",
      "  842  P_15_21_5   \n",
      "  843  P_11_17_5   \n",
      "  844  P_4_17_18   \n",
      "  845  P_15_17_9   \n",
      "  846  P_21_11_13  \n",
      "  847  P_8_13_7    \n",
      "  848  P_3_13_7    \n",
      "  849  P_4_8_12    \n",
      "  850  P_21_4_10   \n",
      "  851  P_17_20_14  \n",
      "  852  P_9_19_12   \n",
      "  853  P_8_20_2    \n",
      "  854  P_16_15_1   \n",
      "  855  P_15_9_14   \n",
      "  856  P_16_13_14  \n",
      "  857  P_21_9_5    \n",
      "  858  P_1_5_19    \n",
      "  859  P_11_1_14   \n",
      "  860  P_3_1_10    \n",
      "  861  P_1_19_10   \n",
      "  862  P_11_8_10   \n",
      "  863  P_6_9_14    \n",
      "  864  P_16_18_2   \n",
      "  865  P_15_6_5    \n",
      "  866  P_21_17_12  \n",
      "  867  P_11_2_10   \n",
      "  868  P_15_8_19   \n",
      "  869  P_20_5_12   \n",
      "  870  P_16_13_10  \n",
      "  871  P_21_17_10  \n",
      "  872  P_4_19_14   \n",
      "  873  P_4_11_6    \n",
      "  874  P_5_2_10    \n",
      "  875  P_1_6_8     \n",
      "  876  P_11_1_7    \n",
      "  877  P_3_21_11   \n",
      "  878  P_15_2_12   \n",
      "  879  P_20_13_10  \n",
      "  880  P_21_4_9    \n",
      "  881  P_21_11_19  \n",
      "  882  P_4_13_2    \n",
      "  883  P_3_8_12    \n",
      "  884  P_3_16_18   \n",
      "  885  P_3_16_2    \n",
      "  886  P_3_6_20    \n",
      "  887  P_1_6_10    \n",
      "  888  P_15_21_7   \n",
      "  889  P_3_21_13   \n",
      "  890  P_15_11_6   \n",
      "  891  P_16_11_13  \n",
      "  892  P_4_10_12   \n",
      "  893  P_21_11_17  \n",
      "  894  P_3_4_13    \n",
      "  895  P_21_1_14   \n",
      "  896  P_8_9_19    \n",
      "  897  P_18_2_14   \n",
      "  898  P_21_4_5    \n",
      "  899  P_3_9_13    \n",
      "  900  P_16_17_8   \n",
      "  901  P_16_21_13  \n",
      "  902  P_6_18_7    \n",
      "  903  P_17_5_12   \n",
      "  904  P_8_20_18   \n",
      "  905  P_15_20_12  \n",
      "  906  P_8_5_10    \n",
      "  907  P_11_5_10   \n",
      "  908  P_1_9_14    \n",
      "  909  P_13_2_10   \n",
      "  910  P_3_17_9    \n",
      "  911  P_15_11_5   \n",
      "  912  P_11_19_12  \n",
      "  913  P_16_1_18   \n",
      "  914  P_11_20_18  \n",
      "  915  P_6_17_9    \n",
      "  916  P_11_6_20   \n",
      "  917  P_4_11_2    \n",
      "  918  P_21_20_5   \n",
      "  919  P_15_6_17   \n",
      "  920  P_20_5_13   \n",
      "  921  P_3_21_10   \n",
      "  922  P_3_6_8     \n",
      "  923  P_3_11_18   \n",
      "  924  P_8_20_9    \n",
      "  925  P_8_19_12   \n",
      "  926  P_21_1_6    \n",
      "  927  P_4_17_20   \n",
      "  928  P_5_18_2    \n",
      "  929  P_16_15_2   \n",
      "  930  P_17_9_19   \n",
      "  931  P_8_14_12   \n",
      "  932  P_4_5_18    \n",
      "  933  P_13_14_12  \n",
      "  934  P_3_21_12   \n",
      "  935  P_21_8_5    \n",
      "  936  P_3_5_18    \n",
      "  937  P_11_8_2    \n",
      "  938  P_5_10_14   \n",
      "  939  P_21_5_18   \n",
      "  940  P_11_9_2    \n",
      "  941  P_11_6_12   \n",
      "  942  P_3_16_8    \n",
      "  943  P_3_20_19   \n",
      "  944  P_6_18_14   \n",
      "  945  P_16_10_14  \n",
      "  946  P_17_13_2   \n",
      "  947  P_11_5_13   \n",
      "  948  P_1_5_10    \n",
      "  949  P_6_20_14   \n",
      "  950  P_11_20_5   \n",
      "  951  P_21_10_7   \n",
      "  952  P_6_9_18    \n",
      "  953  P_4_19_12   \n",
      "  954  P_16_21_11  \n",
      "  955  P_20_2_19   \n",
      "  956  P_15_21_20  \n",
      "  957  P_20_9_19   \n",
      "  958  P_20_12_7   \n",
      "  959  P_4_5_2     \n",
      "  960  P_1_20_2    \n",
      "  961  P_17_5_10   \n",
      "  962  P_15_20_14  \n",
      "  963  P_4_8_19    \n",
      "  964  P_6_20_5    \n",
      "  965  P_11_20_19  \n",
      "  966  P_4_1_9     \n",
      "  967  P_1_8_7     \n",
      "  968  P_6_14_7    \n",
      "  969  P_20_14_12  \n",
      "  970  P_21_14_12  \n",
      "  971  P_15_4_1    \n",
      "  972  P_15_20_7   \n",
      "  973  P_3_2_7     \n",
      "  974  P_8_20_5    \n",
      "  975  P_8_20_12   \n",
      "  976  P_1_18_10   \n",
      "  977  P_20_5_18   \n",
      "  978  P_16_21_12  \n",
      "  979  P_11_20_9   \n",
      "  980  P_1_18_14   \n",
      "  981  P_15_13_12  \n",
      "  982  P_4_1_17    \n",
      "  983  P_21_11_20  \n",
      "  984  P_13_10_12  \n",
      "  985  P_3_18_19   \n",
      "  986  P_1_10_12   \n",
      "  987  P_16_6_12   \n",
      "  988  P_3_2_19    \n",
      "  989  P_9_5_13    \n",
      "  990  P_17_20_18  \n",
      "  991  P_4_17_5    \n",
      "  992  P_3_4_2     \n",
      "  993  P_11_14_12  \n",
      "  994  P_4_18_12   \n",
      "  995  P_4_6_8     \n",
      "  996  P_20_10_12  \n",
      "  997  P_11_8_20   \n",
      "  998  P_1_5_14    \n",
      "  999  P_5_13_10   \n",
      " 1000  P_11_1_8    \n",
      " 1001  P_21_6_5    \n",
      " 1002  P_11_13_19  \n",
      " 1003  P_5_18_12   \n",
      " 1004  P_16_5_13   \n",
      " 1005  P_6_9_5     \n",
      " 1006  P_8_19_7    \n",
      " 1007  P_21_2_19   \n",
      " 1008  P_21_1_19   \n",
      " 1009  P_21_11_5   \n",
      " 1010  P_11_8_5    \n",
      " 1011  P_3_6_13    \n",
      " 1012  P_21_19_7   \n",
      " 1013  P_3_4_17    \n",
      " 1014  P_3_1_6     \n",
      " 1015  P_21_1_7    \n",
      " 1016  P_3_9_19    \n",
      " 1017  P_17_19_7   \n",
      " 1018  P_1_6_20    \n",
      " 1019  P_2_10_7    \n",
      " 1020  P_3_16_7    \n",
      " 1021  P_11_13_7   \n",
      " 1022  P_3_4_11    \n",
      " 1023  P_5_13_18   \n",
      " 1024  P_16_2_10   \n",
      " 1025  P_15_11_20  \n",
      " 1026  P_21_17_18  \n",
      " 1027  P_4_8_13    \n",
      " 1028  P_11_6_2    \n",
      " 1029  P_3_14_7    \n",
      " 1030  P_6_18_10   \n",
      " 1031  P_3_9_10    \n",
      " 1032  P_11_1_10   \n",
      " 1033  P_15_13_18  \n",
      " 1034  P_3_11_2    \n",
      " 1035  P_11_8_13   \n",
      " 1036  P_1_6_14    \n",
      " 1037  P_16_5_2    \n",
      " 1038  P_16_8_9    \n",
      " 1039  P_16_10_7   \n",
      " 1040  P_15_21_2   \n",
      " 1041  P_1_9_13    \n",
      " 1042  P_4_13_19   \n",
      " 1043  P_11_9_13   \n",
      " 1044  P_1_17_12   \n",
      " 1045  P_2_19_7    \n",
      " 1046  P_16_1_6    \n",
      " 1047  P_21_8_7    \n",
      " 1048  P_5_13_14   \n",
      " 1049  P_21_9_10   \n",
      " 1050  P_11_6_8    \n",
      " 1051  P_4_20_12   \n",
      " 1052  P_15_21_11  \n",
      " 1053  P_6_17_5    \n",
      " 1054  P_3_20_13   \n",
      " 1055  P_3_20_18   \n",
      " 1056  P_3_8_5     \n",
      " 1057  P_8_9_2     \n",
      " 1058  P_9_10_12   \n",
      " 1059  P_4_6_12    \n",
      " 1060  P_15_20_2   \n",
      " 1061  P_6_9_10    \n",
      " 1062  P_6_9_13    \n",
      " 1063  P_3_2_12    \n",
      " 1064  P_19_14_7   \n",
      " 1065  P_16_21_20  \n",
      " 1066  P_11_17_8   \n",
      " 1067  P_11_9_14   \n",
      " 1068  P_4_5_7     \n",
      " 1069  P_1_5_2     \n",
      " 1070  P_16_15_4   \n",
      " 1071  P_16_4_14   \n",
      " 1072  P_16_15_12  \n",
      " 1073  P_13_19_10  \n",
      " 1074  P_3_16_13   \n",
      " 1075  P_15_8_2    \n",
      " 1076  P_3_4_10    \n",
      " 1077  P_21_5_7    \n",
      " 1078  P_16_21_6   \n",
      " 1079  P_16_20_7   \n",
      " 1080  P_16_19_7   \n",
      " 1081  P_15_20_10  \n",
      " 1082  P_9_18_2    \n",
      " 1083  P_3_2_10    \n",
      " 1084  P_2_10_12   \n",
      " 1085  P_6_5_19    \n",
      " 1086  P_6_17_10   \n",
      " 1087  P_20_2_14   \n",
      " 1088  P_4_6_5     \n",
      " 1089  P_3_21_5    \n",
      " 1090  P_3_11_8    \n",
      " 1091  P_8_20_14   \n",
      " 1092  P_11_1_2    \n",
      " 1093  P_11_1_19   \n",
      " 1094  P_15_1_20   \n",
      " 1095  P_15_8_5    \n",
      " 1096  P_1_6_12    \n",
      " 1097  P_16_15_8   \n",
      " 1098  P_15_1_10   \n",
      " 1099  P_3_15_13   \n",
      " 1100  P_15_4_10   \n",
      " 1101  P_11_20_7   \n",
      " 1102  P_3_11_13   \n",
      " 1103  P_3_16_17   \n",
      " 1104  P_4_17_8    \n",
      " 1105  P_4_9_19    \n",
      " 1106  P_3_15_20   \n",
      " 1107  P_20_19_12  \n",
      " 1108  P_1_5_13    \n",
      " 1109  P_16_4_18   \n",
      " 1110  P_11_9_19   \n",
      " 1111  P_17_13_7   \n",
      " 1112  P_16_1_10   \n",
      " 1113  P_15_1_9    \n",
      " 1114  P_11_6_17   \n",
      " 1115  P_6_8_10    \n",
      " 1116  P_6_19_14   \n",
      " 1117  P_21_19_10  \n",
      " 1118  P_6_17_14   \n",
      " 1119  P_6_17_7    \n",
      " 1120  P_15_1_8    \n",
      " 1121  P_1_14_7    \n",
      " 1122  P_16_17_18  \n",
      " 1123  P_3_11_12   \n",
      " 1124  P_17_19_12  \n",
      " 1125  P_11_20_2   \n",
      " 1126  P_3_6_9     \n",
      " 1127  P_1_9_18    \n",
      " 1128  P_15_21_18  \n",
      " 1129  P_15_17_5   \n",
      " 1130  P_21_18_12  \n",
      " 1131  P_16_15_5   \n",
      " 1132  P_21_11_12  \n",
      " 1133  P_15_4_19   \n",
      " 1134  P_19_14_12  \n",
      " 1135  P_3_15_18   \n",
      " 1136  P_13_2_14   \n",
      " 1137  P_6_8_9     \n",
      " 1138  P_21_1_9    \n",
      " 1139  P_6_13_19   \n",
      " 1140  P_15_2_7    \n",
      " 1141  P_15_20_18  \n",
      " 1142  P_9_14_12   \n",
      " 1143  P_15_17_14  \n",
      " 1144  P_15_8_13   \n",
      " 1145  P_21_17_13  \n",
      " 1146  P_2_14_7    \n",
      " 1147  P_8_12_7    \n",
      " 1148  P_21_9_14   \n",
      " 1149  P_3_15_11   \n",
      " 1150  P_1_5_18    \n",
      " 1151  P_3_13_18   \n",
      " 1152  P_18_19_14  \n",
      " 1153  P_3_1_7     \n",
      " 1154  P_16_9_18   \n",
      " 1155  P_16_8_13   \n",
      " 1156  P_3_16_10   \n",
      " 1157  P_3_4_12    \n",
      " 1158  P_4_17_2    \n",
      " 1159  P_1_13_2    \n",
      " 1160  P_16_14_7   \n",
      " 1161  P_16_5_18   \n",
      " 1162  P_6_9_7     \n",
      " 1163  P_15_21_19  \n",
      " 1164  P_8_10_14   \n",
      " 1165  P_11_10_7   \n",
      " 1166  P_15_4_18   \n",
      " 1167  P_11_1_6    \n",
      " 1168  P_6_5_2     \n",
      " 1169  P_4_11_12   \n",
      " 1170  P_20_9_14   \n",
      " 1171  P_16_4_5    \n",
      " 1172  P_17_8_14   \n",
      " 1173  P_17_13_12  \n",
      " 1174  P_21_4_8    \n",
      " 1175  P_15_8_10   \n",
      " 1176  P_15_8_7    \n",
      " 1177  P_6_8_2     \n",
      " 1178  P_17_8_12   \n",
      " 1179  P_11_17_14  \n",
      " 1180  P_21_1_12   \n",
      " 1181  P_8_5_13    \n",
      " 1182  P_17_20_19  \n",
      " 1183  P_21_18_7   \n",
      " 1184  P_17_5_19   \n",
      " 1185  P_1_5_7     \n",
      " 1186  P_4_2_7     \n",
      " 1187  P_11_10_14  \n",
      " 1188  P_9_18_7    \n",
      " 1189  P_3_16_9    \n",
      " 1190  P_3_16_15   \n",
      " 1191  P_2_12_7    \n",
      " 1192  P_3_4_1     \n",
      " 1193  P_1_9_19    \n",
      " 1194  P_6_2_10    \n",
      " 1195  P_21_8_13   \n",
      " 1196  P_15_17_20  \n",
      " 1197  P_21_1_17   \n",
      " 1198  P_16_21_9   \n",
      " 1199  P_10_14_7   \n",
      " 1200  P_15_4_11   \n",
      " 1201  P_17_13_19  \n",
      " 1202  P_1_8_20    \n",
      " 1203  P_3_11_1    \n",
      " 1204  P_21_20_2   \n",
      " 1205  P_8_2_19    \n",
      " 1206  P_4_11_13   \n",
      " 1207  P_8_2_7     \n",
      " 1208  P_8_20_7    \n",
      " 1209  P_21_4_1    \n",
      " 1210  P_17_12_7   \n",
      " 1211  P_5_13_19   \n",
      " 1212  P_3_21_8    \n",
      " 1213  P_15_11_1   \n",
      " 1214  P_16_10_12  \n",
      " 1215  P_4_9_7     \n",
      " 1216  P_3_19_12   \n",
      " 1217  P_15_21_6   \n",
      " 1218  P_17_18_7   \n",
      " 1219  P_3_14_12   \n",
      " 1220  P_6_13_14   \n",
      " 1221  P_3_11_6    \n",
      " 1222  P_15_2_19   \n",
      " 1223  P_4_18_14   \n",
      " 1224  P_5_18_10   \n",
      " 1225  P_4_1_18    \n",
      " 1226  P_5_19_14   \n",
      " 1227  P_16_15_20  \n",
      " 1228  P_1_18_7    \n",
      " 1229  P_21_14_7   \n",
      " 1230  P_10_14_12  \n",
      " 1231  P_16_2_14   \n",
      " 1232  P_1_17_2    \n",
      " 1233  P_3_5_7     \n",
      " 1234  P_2_19_12   \n",
      " 1235  P_17_14_12  \n",
      " 1236  P_4_8_9     \n",
      " 1237  P_4_1_6     \n",
      " 1238  P_15_6_19   \n",
      " 1239  P_6_17_19   \n",
      " 1240  P_17_20_10  \n",
      " 1241  P_1_6_17    \n",
      " 1242  P_15_6_12   \n",
      " 1243  P_9_18_10   \n",
      " 1244  P_11_6_18   \n",
      " 1245  P_15_5_2    \n",
      " 1246  P_15_17_13  \n",
      " 1247  P_19_10_12  \n",
      " 1248  P_11_9_18   \n",
      " 1249  P_8_14_7    \n",
      " 1250  P_20_2_7    \n",
      " 1251  P_15_9_12   \n",
      " 1252  P_15_10_12  \n",
      " 1253  P_3_11_5    \n",
      " 1254  P_21_11_9   \n",
      " 1255  P_9_5_19    \n",
      " 1256  P_21_20_13  \n",
      " 1257  P_21_1_2    \n",
      " 1258  P_16_15_11  \n",
      " 1259  P_3_20_14   \n",
      " 1260  P_20_19_7   \n",
      " 1261  P_6_10_7    \n",
      " 1262  P_6_8_20    \n",
      " 1263  P_15_4_6    \n",
      " 1264  P_16_13_2   \n",
      " 1265  P_3_4_6     \n",
      " 1266  P_21_18_19  \n",
      " 1267  P_8_20_13   \n",
      " 1268  P_13_10_14  \n",
      " 1269  P_13_18_19  \n",
      " 1270  P_4_1_8     \n",
      " 1271  P_21_4_12   \n",
      " 1272  P_16_17_2   \n",
      " 1273  P_16_17_12  \n",
      " 1274  P_1_17_8    \n",
      " 1275  P_21_17_2   \n",
      " 1276  P_2_19_10   \n",
      " 1277  P_17_8_2    \n",
      " 1278  P_15_18_19  \n",
      " 1279  P_8_2_14    \n",
      " 1280  P_1_20_10   \n",
      " 1281  P_11_1_9    \n",
      " 1282  P_17_18_10  \n",
      " 1283  P_15_13_2   \n",
      " 1284  P_17_5_18   \n",
      " 1285  P_6_20_19   \n",
      " 1286  P_6_5_18    \n",
      " 1287  P_3_6_19    \n",
      " 1288  P_3_16_21   \n",
      " 1289  P_16_8_5    \n",
      " 1290  P_21_4_2    \n",
      " 1291  P_6_12_7    \n",
      " 1292  P_6_5_13    \n",
      " 1293  P_3_8_18    \n",
      " 1294  P_16_6_14   \n",
      " 1295  P_16_6_17   \n",
      " 1296  P_16_18_12  \n",
      " 1297  P_15_21_10  \n",
      " 1298  P_1_9_2     \n",
      " 1299  P_5_18_14   \n",
      " 1300  P_20_18_19  \n",
      " 1301  P_15_9_19   \n",
      " 1302  P_5_14_12   \n",
      " 1303  P_21_6_18   \n",
      " 1304  P_13_2_19   \n",
      " 1305  P_6_19_10   \n",
      " 1306  P_17_2_14   \n",
      " 1307  P_8_9_5     \n",
      " 1308  P_3_17_18   \n",
      " 1309  P_16_1_14   \n",
      " 1310  P_4_11_17   \n",
      " 1311  P_3_16_1    \n",
      " 1312  P_16_4_2    \n",
      " 1313  P_4_2_19    \n",
      " 1314  P_18_10_12  \n",
      " 1315  P_21_17_5   \n",
      " 1316  P_16_15_7   \n",
      " 1317  P_15_4_17   \n",
      " 1318  P_8_5_18    \n",
      " 1319  P_4_2_12    \n",
      " 1320  P_6_5_7     \n",
      " 1321  P_11_5_12   \n",
      " 1322  P_11_20_10  \n",
      " 1323  P_9_2_10    \n",
      " 1324  P_3_15_19   \n",
      " 1325  P_16_4_6    \n",
      " 1326  P_18_10_7   \n",
      " 1327  P_6_10_14   \n",
      " 1328  P_16_21_14  \n",
      " 1329  P_1_10_7    \n"
     ]
    }
   ],
   "source": [
    "!molli ls R3P_chiral.mlib"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "dev-blake",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
